home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / p9054_lib.h < prev    next >
C/C++ Source or Header  |  2001-04-11  |  7KB  |  208 lines

  1. #ifndef _P9054_LIB_H_
  2. #define _P9054_LIB_H_
  3.  
  4. #if !defined(UNIX) && (defined(LINUX) || defined(SOLARIS))
  5.     #define UNIX
  6. #endif
  7.  
  8. #if defined(__KERNEL__)
  9.     #include "../../../include/kdstdlib.h"
  10. #endif 
  11. #include "../../../include/windrvr.h"
  12. #include "../../../samples/shared/pci_regs.h"
  13. #include "../../../samples/shared/bits.h"
  14.  
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18.  
  19. // PLX register definitions 
  20. enum {
  21.     P9054_LAS0RR    = 0x00,
  22.     P9054_LAS0BA    = 0x04,
  23.     P9054_MARBR        = 0x08,
  24.     P9054_BIGEND     = 0x0c,
  25.     P9054_LMISC     = 0x0d,
  26.     P9054_PROT_AREA = 0x0e,
  27.     P9054_EROMRR    = 0x10,
  28.     P9054_EROMBA    = 0x14,
  29.     P9054_LBRD0        = 0x18,
  30.     P9054_DMRR        = 0x1c,
  31.     P9054_DMLBAM    = 0x20,
  32.     P9054_DMLBAI    = 0x24,
  33.     P9054_DMPBAM    = 0x28,
  34.     P9054_DMCFGA    = 0x2c,
  35.     P9054_OPQIS        = 0x30,
  36.     P9054_OPQIM        = 0x34,
  37.     P9054_IQP        = 0x40,
  38.     P9054_OQP        = 0x44,
  39.     P9054_MQCR        = 0xc0,
  40.     P9054_QBAR        = 0xc4,
  41.     P9054_MBOX0_OLD    = 0x40,
  42.     P9054_MBOX1_OLD    = 0x44,
  43.     P9054_MBOX0        = 0x78,
  44.     P9054_MBOX1        = 0x7c,
  45.     P9054_MBOX2        = 0x48,
  46.     P9054_MBOX3        = 0x4c,
  47.     P9054_MBOX4        = 0x50,
  48.     P9054_MBOX5        = 0x54,
  49.     P9054_MBOX6        = 0x58,
  50.     P9054_MBOX7        = 0x5c,
  51.     P9054_P2LDBELL    = 0x60,
  52.     P9054_L2PDBELL    = 0x64,
  53.     P9054_INTCSR    = 0x68,
  54.     P9054_CNTRL        = 0x6c,
  55.     P9054_PCIHIDR    = 0x70,
  56.     P9054_PCIHREV    = 0x74,
  57.     P9054_DMAMODE    = 0x80,
  58.     P9054_DMAPADR    = 0x84,
  59.     P9054_DMALADR    = 0x88,
  60.     P9054_DMASIZ    = 0x8c,
  61.     P9054_DMADPR    = 0x90,
  62.     P9054_DMAMODE1    = 0x94,
  63.     P9054_DMAPADR1    = 0x98,
  64.     P9054_DMALADR1    = 0x9c,
  65.     P9054_DMASIZ1    = 0xa0,
  66.     P9054_DMADPR1    = 0xa4,
  67.     P9054_DMACSR    = 0xa8,
  68.     P9054_DMACSR1    = 0xa9,
  69.     P9054_DMAARB    = 0xac,
  70.     P9054_DMATHR    = 0xb0,
  71.     P9054_DMADAC0    = 0xb4,
  72.     P9054_DMADAC1    = 0xb8,
  73.     P9054_IFHPR        = 0xc8,
  74.     P9054_IFTPR        = 0xcc,
  75.     P9054_IPHPR        = 0xd0,
  76.     P9054_IPTPR        = 0xd4,
  77.     P9054_OFHPR        = 0xd8,
  78.     P9054_OFTPR        = 0xdc,
  79.     P9054_OPHPR        = 0xe0,
  80.     P9054_OPTPR        = 0xe4,
  81.     P9054_QSR        = 0xe8,
  82.     P9054_LAS1RR    = 0xf0,
  83.     P9054_LAS1BA    = 0xf4,
  84.     P9054_LBRD1        = 0xf8,
  85.     P9054_DMDAC        = 0xfc
  86. };
  87.  
  88. // PLX specific PCI configuration registers
  89. enum {
  90.     P9054_VPD_ADDR   = 0x4E,
  91.     P9054_VPD_DATA   = 0x50,
  92. };
  93.  
  94. typedef enum
  95. {
  96.     P9054_DMA_CHANNEL_0 = 0,
  97.     P9054_DMA_CHANNEL_1 = 1
  98. } P9054_DMA_CHANNEL;
  99.  
  100. typedef enum
  101. {
  102.     P9054_MODE_BYTE   = 0,
  103.     P9054_MODE_WORD   = 1,
  104.     P9054_MODE_DWORD  = 2
  105. } P9054_MODE;
  106.  
  107. typedef enum
  108. {
  109.     P9054_ADDR_REG     = AD_PCI_BAR0,
  110.     P9054_ADDR_REG_IO  = AD_PCI_BAR1,
  111.     P9054_ADDR_SPACE0  = AD_PCI_BAR2,
  112.     P9054_ADDR_SPACE1  = AD_PCI_BAR3,
  113.     P9054_ADDR_SPACE2  = AD_PCI_BAR4,
  114.     P9054_ADDR_SPACE3  = AD_PCI_BAR5,
  115.     P9054_ADDR_EPROM   = AD_PCI_BAR_EPROM
  116. } P9054_ADDR;
  117.  
  118. enum { P9054_RANGE_REG = 0x00000080 };
  119.  
  120. typedef struct P9054_DMA_STRUCT *P9054_DMA_HANDLE;
  121.  
  122. typedef struct P9054_STRUCT *P9054_HANDLE;
  123.  
  124. typedef struct
  125. {
  126.     DWORD dwCounter;   // number of interrupts received
  127.     DWORD dwLost;      // number of interrupts not yet dealt with
  128.     BOOL fStopped;     // was interrupt disabled during wait
  129.     DWORD dwStatusReg; // value of status register when interrupt occured
  130. } P9054_INT_RESULT;
  131. typedef void (WINAPI *P9054_INT_HANDLER)( P9054_HANDLE hPlx, P9054_INT_RESULT *intResult);
  132.  
  133. // options for PLX_Open
  134. enum { P9054_OPEN_USE_INT =   0x1 };
  135.  
  136. DWORD P9054_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
  137. BOOL P9054_Open (P9054_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions);
  138. void P9054_Close (P9054_HANDLE hPlx);
  139. BOOL P9054_IsAddrSpaceActive(P9054_HANDLE hPlx, P9054_ADDR addrSpace);
  140. void P9054_GetPciSlot(P9054_HANDLE hPlx, WD_PCI_SLOT *pPciSlot);
  141.  
  142. void P9054_ReadWriteBlockLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  143.                     DWORD dwBytes, BOOL fIsRead, P9054_MODE mode);
  144. void P9054_ReadBlockLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9054_MODE mode);
  145. void P9054_WriteBlockLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9054_MODE mode);
  146. BYTE P9054_ReadByteLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr);
  147. void P9054_WriteByteLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
  148. WORD P9054_ReadWordLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr);
  149. void P9054_WriteWordLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
  150. DWORD P9054_ReadDWordLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr);
  151. void P9054_WriteDWordLocal (P9054_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);
  152.  
  153. void P9054_ReadWriteBlock (P9054_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  154.                     DWORD dwBytes, BOOL fIsRead, P9054_ADDR addrSpace, P9054_MODE mode);
  155. BYTE P9054_ReadByte (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset);
  156. void P9054_WriteByte (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset, BYTE data);
  157. WORD P9054_ReadWord (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset);
  158. void P9054_WriteWord (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset, WORD data);
  159. DWORD P9054_ReadDWord (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset);
  160. void P9054_WriteDWord (P9054_HANDLE hPlx, P9054_ADDR addrSpace, DWORD dwOffset, DWORD data);
  161. void P9054_ReadBlock (P9054_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  162.                     DWORD dwBytes, P9054_ADDR addrSpace, P9054_MODE mode);
  163. void P9054_WriteBlock (P9054_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  164.                      DWORD dwBytes, P9054_ADDR addrSpace, P9054_MODE mode);
  165.  
  166. // interrupt functions
  167. BOOL P9054_IntIsEnabled (P9054_HANDLE hPlx);
  168. BOOL P9054_IntEnable (P9054_HANDLE hPlx, P9054_INT_HANDLER funcIntHandler);
  169. void P9054_IntDisable (P9054_HANDLE hPlx);
  170.  
  171. // access registers
  172. DWORD P9054_ReadReg (P9054_HANDLE hPlx, DWORD dwReg);
  173. void P9054_WriteReg (P9054_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  174.  
  175. // access PCI configuration registers
  176. DWORD P9054_ReadPCIReg(P9054_HANDLE hPlx, DWORD dwReg);
  177. void P9054_WritePCIReg(P9054_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  178.  
  179. // Start DMA to/from card.
  180. // fIsRead - TRUE: read from card to buffer.  FALSE: write from buffer to card
  181. // dwBytes - number of bytes to transfer (must be a multiple of 4)
  182. // mode - local bus width.
  183. // dwLocalAddr - local address on card to write to / read from
  184. // channel - uses channel 0 or 1 of the 9054
  185. // buf - the buffer to transfer
  186. P9054_DMA_HANDLE P9054_DMAOpen (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  187.     DWORD dwBytes, BOOL fIsRead, P9054_MODE mode, P9054_DMA_CHANNEL dmaChannel);
  188. void P9054_DMAClose (P9054_HANDLE hPlx, P9054_DMA_HANDLE hDma);
  189. void P9054_DMAStart (P9054_HANDLE hPlx, P9054_DMA_HANDLE hDma, BOOL fBlocking);
  190. BOOL P9054_DMAIsDone (P9054_HANDLE hPlx, P9054_DMA_HANDLE hDma);
  191. BOOL P9054_DMAReadWriteBlock (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  192.     DWORD dwBytes, BOOL fIsRead, P9054_MODE mode, P9054_DMA_CHANNEL dmaChannel);
  193.  
  194. BOOL P9054_EEPROMReadWord(P9054_HANDLE hPlx, DWORD dwOffset, PWORD pwData);
  195. BOOL P9054_EEPROMWriteWord(P9054_HANDLE hPlx, DWORD dwOffset, WORD wData);
  196. BOOL P9054_EEPROMReadDWord(P9054_HANDLE hPlx, DWORD dwOffset, PDWORD pdwData);
  197. BOOL P9054_EEPROMWriteDWord(P9054_HANDLE hPlx, DWORD dwOffset, DWORD dwData);
  198. BOOL P9054_EEPROMValid(P9054_HANDLE hPlx);
  199.  
  200. // this string is set to an error message, if one occurs
  201. extern CHAR P9054_ErrorString[];
  202.  
  203. #ifdef __cplusplus
  204. }
  205. #endif
  206.  
  207. #endif
  208.